import { join } from "path";
import fs from "fs-extra";
import { pathToFileURL } from "url";

export async function loadConfig(configPath) {
  // 获取项目根目录
  const projectRoot = process.cwd();
  // 使用join代替resolve来更好地处理路径分隔符
  const configFilePath = join(projectRoot, configPath);

  // 检查配置文件是否存在
  if (!fs.existsSync(configFilePath)) {
    throw new Error(`配置文件 ${configPath} 不存在`);
  }

  try {
    // 动态导入配置文件，避免使用file://协议导致darwin系统错误
    const moduleUrl = pathToFileURL(configFilePath).href;
    const configModule = await import(moduleUrl);
    const userConfig = configModule.default || configModule;

    // 验证必要配置项
    validateConfig(userConfig);

    return userConfig;
  } catch (error) {
    throw new Error(`加载配置文件失败: ${error.message}`);
  }
}

function validateConfig(config) {
  if (!config.i18nDir) {
    throw new Error("配置文件中缺少 i18nDir 字段");
  }

  if (!config.xlsxDir) {
    throw new Error("配置文件中缺少 xlsxDir 字段");
  }

  if (!config.languages || !Array.isArray(config.languages)) {
    throw new Error("配置文件中缺少有效的 languages 字段");
  }
}
